VBA中的切换工作表并不像我希望的那样工作

时间:2017-06-17 23:32:33

标签: excel vba excel-vba

我在一个工作簿中切换工作表时遇到问题。请看一下以下内容:

Set chs = Range("1:1")
Set Employ = chs.Find("Employee")
Set Sal = chs.Find("Salary")

Worksheets("Sheet1").Activate
a = Range(Columns(Employ.Column), Columns(Sal.Column)).Select
Worksheets("Sheet2").Activate
b = Range(Columns(Employ.Column), Columns(Sal.Column)).Select

我希望程序做的是激活sheet1,然后选择标题为#34; Employee"的列。和"薪水" (我在下面定义了这些),然后激活sheet2,然后选择标题为" Employee"和"薪水"再次,特别是 激活的工作表。

但是,这就是它正在做的事情。在sheet1中,员工和工资的列是A和F.这些将被选中,中间的一切都很好。但是当激活sheet2时,如果我尝试选择分别为B列和K列的雇员和薪水列,它仍然只会选择A到F列。反之亦然:如果我先激活表2,它会选择sheet1中的列B到K,它们与标题不匹配。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您设置Employ变量的方式,每次切换工作表时都不会更改。在这种情况下,您的程序首先在Range("1:1")中找到“Employ”字符串,但不清楚它在哪里:它将在哪个工作表处于活动状态。

从上下文来看,您需要一个动态查找EmploySal的函数。也许你需要这样的功能:

Function FindEmploy(sht As Worksheet) As Range
    Set FindEmploy = sht.Range("1:1").Find("Employ")
End Function

FindSal类似。然后你的代码就像:

Dim sht1 As Worksheet
Set sht1 = Worksheets("Sheet1")
sht1.Activate
a = sht1.Range(Columns(FindEmploy(sht1).Column), Columns(FindSal(sht1).Column)).Select

和Sheet2和b类似。