繁体   English   中英

在Excel VBA中使用变量通过其编号声明工作表

[英]Using a variable to declare a worksheet by its number in Excel VBA

晚上好。 我迫切需要一些简短的VBA代码帮助。

Public TFOCUS As Integer ' Creates TFOCUS, which is the worksheet in focus
Public RFOCUS As Integer ' Creates RFOCUS, which is the row in focus
Public CFOCUS As String  ' Creates CFOCUS, which is the column in focus
Public RECORD As Integer ' Creates RECORD, wich is the row that is having the record written to

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination
FILEPATH.Worksheets(TFOCUS).Range(Cells(4, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, B)).Value 'copies focus Course to destination
FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, C)).Value 'copies focus Date to destination
CFOCUS = CFOCUS + 1 'moves focus to next column
RECORD = RECORD + 1 'creates next record

FILEPATH设置为外部Excel工作簿的路径。 在这种情况下,TFOCUS设置为1,RFOCUS设置为5,CFOCUS设置为“ Q”,RECORD设置为1。

目的是将记录从外部excel文档复制到活动电子表格中,并通过移动单元格内容来重新格式化它们。 这将用于移动多个源,并且必须处理每个源文档中的每个选项卡(都可以命名为不同的名称)。

我遇到的问题是,我在以下行上收到运行时错误13:编译时键入不匹配错误:

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination

我假设这与将TFOCUS用作整数或将FILEPATH用作文件路径有关。 谁能建议:

  • 到底不匹配是什么
  • 如果是由于使用工作表(TFOCUS),我有什么办法可以使用变量按Tab键顺序按工作表编号引用工作表?
  • 还有其他建议吗?

在此先感谢您的帮助。

您没有向我们显示变量的分配位置/位置,而是...

 Public RFOCUS As Integer ' Creates RFOCUS, which is the row in focus Public CFOCUS As String ' Creates CFOCUS, which is the column in focus 

尝试将CFOCUS声明为Integer 或者更好,作为Long ,以便您的代码可以在行32767之后使用( Integer类型是16位且带符号,因此32768是一个溢出值)。

另外,如果FILEPATHString ,那么您的代码将无法工作:

FILEPATH设置为外部Excel工作簿的路径。

 FILEPATH.Worksheets(TFOCUS) 

它应该是一个Workbook对象。但是您使用的标识符非常混乱。

Dim wb As Workbook
Set wb = Workbooks.Open(FILEPATH)

wb.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination
wb.Worksheets(TFOCUS).Range(Cells(4, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, B)).Value 'copies focus Course to destination
wb.Worksheets(TFOCUS).Range(Cells(RFOCUS, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, C)).Value 'copies focus Date to destination
CFOCUS = CFOCUS + 1 'moves focus to next column
RECORD = RECORD + 1 'creates next record

'save [wb] workbook? Close it?
Set wb = Nothing

我是否也可以建议将YELLCASE用作常量,对本地人使用camelCase并对其他所有内容使用PascalCase

如果RFOCUS设置为“ Q”,并且B和A是整数,则此操作:

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value

应该:

FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & B).Value = Worksheets(3).Cells(Record, A).Value

这是所有3行:

FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & B).Value = Worksheets(3).Cells(Record, A).Value
FILEPATH.Worksheets(TFOCUS).Cells(4, CFOCUS).Value = Worksheets(3).Cells(Record, B).Value
FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & CFOCUS).Value = Worksheets(3).Cells(Record, C).Value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM