将Const替换为对话框以更新范围?

时间:2019-03-08 16:09:45

标签: vba

我有一个工作表,可用来放置原始数据,以验证从该原始数据切出的单个文件上的数据。事实是,脚本倾向于截断它验证的数据,而忽略我带来的行尾的空白行。

我该如何更改:

Private Const numCols As Long = 76

要做一个columns.count

例如:如果有76列,但第二行直到50列为止都有数据,它将采用该行并将其转置,而不会在51-76列中留下空白单元格,从而偏移我的数据并返回FALSE我验证时的值。现在,我必须更新该long变量,以确保在我的数据集更改时它不会切断尾随空白。

我可以做些什么来使其更具动态性,同时还要确保在我还需要包含空格时脚本不会忽略空格?

1 个答案:

答案 0 :(得分:0)

如果标题确定了多少列,那么您可以计算该行以获取数字。假设标题位于第1行。

Dim numCols as Long
numCols = Application.WorksheetFunction.Counta(sheet1.rows(1))

您也可以从用户那里获取

numCols = Application.InputBox("Enter # of columns")

如果在一些过程中使用列数,则可以将其作为参数传递,也可以使用模块级变量。在模块顶部(在声明部分的所有Sub或Function语句之前)声明模块级别变量,例如

Private numCols As Long

您仍然需要在运行的第一个过程中进行设置。它不能为常数,因为它会根据第一行的宽度而变化。

您可以参考工作表进行相同的操作。我使用了工作表的代号(用户看不见且无法更改的名称),但是您可以创建一个变量来引用工作表

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("MySheet")

我通常使用代号而不是变量,但这是个人喜好。