我想从doCmd.transferSpreadsheet
的Excel工作簿的n th 工作表中导入数据。此命令要求表的名称为6 th 参数。不幸的是,工作表的名称一直是chaning(想想last edited by XYZ, March 29
),所以我没有机会知道我感兴趣的工作表的名称。
有没有办法按工作表位置而不是工作表名称来指示范围?
答案 0 :(得分:-1)
假设您不知道索引,只有位置(不等效,抱歉),您需要查看工作簿中的每个工作表。像这样:
SheetNameBaseString="whatever you know from the sheet name that won't change"
for each sheetVariable in workbookObject.Sheets
if instr(sheetVariable, SheetNameBaseString)<>0 _
then theSheetThatIWant=sheetVariable.index
next sheetVariable
docmd.transferspreadsheet ......., sheets(theSheetThatIWant) ........
现在,如果您有多张具有相同“基本”名称的工作表......您手上就有问题。 :)然后,再次,如果您的用户创建新工作表,那么最近创建的工作表应该是您想要的工作表。在许多情况下,该工作表的索引可能等同于工作簿中的最高工作表索引。所以只需将此if语句放在上面的语句中,然后说出if sheetvariable.index>theSheetThatIWant then theSheetThatIWant=sheetVariable.index
。
这里的另一个选择可能是在你的循环中`格式化(instrrev(sheetVariable.name,“,”))并抓住最新的,如果你上面给出的格式是100%准确的,如果你知道那张表你正在寻找的是最近重命名的,如果它总是以您正在寻找的格式提供正确的数据。
但是,在一天结束时,如果您无法控制用户的命名约定,或者工作簿有如此多的用途,您无法预测用户将要执行的操作以及按什么顺序进行操作,那么可能需要重新考虑整个工作簿。您知道,Access不是唯一可以“拆分”的Office项目...您可能必须将前端与数据分开,并自行更改工作表/表/数据的名称。如果你继承了某人的工具,这并不理想,但它可能比继续猜测工作表的“位置”并弄错它更好......并且在此过程中对客户看起来很愚蠢。