Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel VBA中使用变量按工作表编号声明工作表_Excel_Vba_Variables_Integer_Worksheet - Fatal编程技术网

在Excel VBA中使用变量按工作表编号声明工作表

在Excel VBA中使用变量按工作表编号声明工作表,excel,vba,variables,integer,worksheet,Excel,Vba,Variables,Integer,Worksheet,晚上好。我迫切需要一些帮助,我正在写一小段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

晚上好。我迫切需要一些帮助,我正在写一小段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:Type Mismatch错误,在下面的一行:

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination
我假设这与将TFOCUS用作整数或将FILEPATH用作文件路径有关。谁能建议:

  • 到底是什么不匹配
  • 如果是因为使用了工作表(TFOCUS),我是否可以通过变量按制表符顺序引用工作表的编号
  • 还有其他建议吗

提前感谢您的帮助。

您没有告诉我们变量分配的位置/是否,但是

尝试将
CFOCUS
声明为
整数
。或者更好,作为一个
Long
,这样您的代码就可以在第32767行之外工作(
Integer
类型是16位且有符号的,所以32768是一个溢出值)

另外,如果
文件路径
字符串
,则代码无法工作:

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

它应该是
工作簿
对象。。但是您使用的标识符非常混乱

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

谢谢Matts Mug,我已经有几年没有编码了,忘记了很多约定和语法。另外,对于VBA for excel来说,这是相当新的。我将在星期一试一试,并整理出我的变量名!感谢您迄今为止的帮助,祝您复活节周末愉快!经济学家,谢谢你指出——事实上,我把RFOCUS和CFOCUS搞错了——RFOCUS是脚本正在处理的行,CFOCUS是列。因此,当RFOCUS设置为5时,我引用的是单元格5B。当CFOCUS设置为Q时,我引用的是单元格4Q。我将修改我的问题以反映这一点。我应该被称为CFOCUS、B、CFOCUS&B、CFOCUS、“B”还是CFOCUS&B?同样,数字应该是4还是“4”?感谢您迄今为止的帮助,祝您复活节周末愉快!确保引用单元格、列和行(如B5),我认为这将对您有所帮助。因此,如果CFOCUS设置为“Q”,并且您想要单元格Q4,您会说:
CFOCUS=“Q”
工作表(3).range(CFOCUS&5).value
FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & B).Value = Worksheets(3).Cells(Record, A).Value
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