如何将定义的最后一行用作范围的一部分?

时间:2019-07-03 14:27:20

标签: excel vba

我目前是暑假的实习生,是VBA的新员工(刚刚在19/6/29上班),并且我正在尝试创建“订单帐龄报告”以提高公司的知名度。有问题的问题是,无论我尝试修改多少代码(我将附上几个示例),我都会遇到类型不匹配错误,或者代码运行没有问题,但不会将计算出的值输入到这个范围。我不会问我已经尝试过的资源是否已经解决了这个问题,并且我准备承认这很可能是一个非常基础的错误。我没有在StackOverflow上找到任何可以解决我的特定问题的帖子。我对此很陌生,并且对代码进行了一般的编码(几个月前我刚刚为数据科学学习Python)。有人愿意帮助我寻求适当解决方案的方向(而非解决方案)吗?感觉这是一个非常简单的解决方案,我踢自己是因为我仍然想不通。

  • 我尝试将最后一行的值转换为字符串,以使其与我尝试将其连接的范围兼容,这只会产生类型不匹配的错误。

    < / li>
  • 我尝试了以下格式的连接方法:Range(“ C2”&LR),这是代码运行但不返回任何值的问题所在。

  • 我尝试为行定义一个计数器,然后将其值打印到表外的单元格中,并将其用作计算的一部分。

  • 我已经尝试了在每一列中使用For Each循环,并将在“输入框”中输入的值用作为每个单元格输入的值。这行得通,但是每次运行时它都会冻结我的Excel。

  • 我尝试使用大于表的任意选择的数字,并且此方法可行。但是出于明显的原因,这不是我想要的解决方案。只是懒惰,没有学习价值哈哈。

我希望这个背景没有太大限制,我想提前感谢大家的建议!

这是我正在运行的当前代码:

    Sub FillWeeknDay()

    Dim lRow As Long
    Dim LR As String
    lRow = Cells(Rows.Count, 1).End(xlUp).Row
    LR = lRow

    Dim Week As Variant
    Week = InputBox("What week is this OOR being made in?")
    Range("C2:C" & LR).value = Week

    Dim Day As Variant
    Day = InputBox("Are you creating this report on Monday, Wednesday, or Friday?")
    Range("D2:D" & LR).value = Day

    End Sub

预期结果是,输入到输入框中的值将输入到Range的单元格中,直到该列的最后一行。实际结果要么什么都没有,要么是我提到的类型不匹配错误。

1 个答案:

答案 0 :(得分:0)

根据我的评论,尝试以下操作(添加的评论有助于显示我所做的更改,但是您可以在实际代码中将其删除):

Sub FillWeeknDay()
Dim ws as Worksheet
' Change the worksheet name below if needed. It should be the name of the sheet
' you want the code to run on/with
Set ws = ThisWorkbook.Worksheets("Sheet1")

' Good job using `Long`, because the number of rows can exceed 
' what an `Integer` can hold.  Note how I added `ws` before the Range object
' which makes sure that we're counting the `Cells()...` info on the correct page.
Dim lRow As Long 
lRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

' Change variable name, and make a String
Dim userWeek as String
userWeek = InputBox("What week is this OOR being made in?")
ws.Range("C2:C" & lRow).Value = userWeek 

Dim userDay As String
userDay = InputBox("Are you creating this report on Monday, Wednesday, or Friday?")
ws.Range("D2:D" & lRow).Value = userDay 

End Sub

我更改了Day,因为它是VBA中的保留术语。更改了Week只是为了与userDay“样式”相匹配...但是很可能保留了Week

编辑:我还假定此代码在不是Personal.xlsb的工作簿中。如果要将其放在Personal.xlsb中,请将上面的ThisWorkbook更改为ActiveWorkbook