【问题标题】:How to get inputbox parameters in vba如何在vba中获取输入框参数
【发布时间】:2021-09-06 20:35:11
【问题描述】:

我有一个小问题。我需要在 msgbox 中轻松获取每个范围参数作为变量。我可以尝试使用 range.adress 中的 mid 或 left 来获取此目标,但范围可以是可变的,我必须根据范围内数字和字母的长度来执行“if”。有没有简单的方法来获取变量a,b,e,f? 提前谢谢你。

  Sub RangeSelectionPrompt()
  Dim rng As Range
  Dim cell As CellFormat
  
  Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
  MsgBox "The cells selected were " & rng.Address

 
  f = rng.Address
  MsgBox f 'example: $P$11:$T$15


rng.Address = Range(cell(a, b), cell(e, f)) ' 
MsgBox a 'value a
MsgBox b 'value b
MsgBox e 'value e
MsgBox f 'value f
    
  
End Sub

【问题讨论】:

  • 似乎是 XY 问题。你实际上想用这些变量做什么?
  • arng.cells(1).Rowbrng.cells(1).Column rng.cells(rng.cells.count).Row/Column 类似,这是假设选择了一个矩形单区域范围。
  • 另外,您似乎正在尝试设置 rng.Address 的值,这是不允许的,因此很难准确理解您要做什么。

标签: excel vba cell inputbox


【解决方案1】:

看看对你有没有帮助

Sub RangeSelectionPrompt_sample()

Dim A As Range, B As Range
Set A = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
Set B = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
ActiveSheet.Range(A.Address & ":" & B.Address).Select

Dim c As Long, d As Long, e As Long, f As Long
c = InputBox("First Line")
d = InputBox("First Collunm")
e = InputBox("Last Line")
f = InputBox("Last Collunm")
ActiveSheet.Range(ActiveSheet.Cells(c, d), ActiveSheet.Cells(e, f)).Select
End Sub

如果你想看太多(使用太 debug.print):

MsgBox ActiveSheet.Range(ActiveSheet.Cells(c, d), ActiveSheet.Cells(e, f)).Address

【讨论】:

    【解决方案2】:

    当您想通过输入参数来指定范围时,@Julio Gadioli Soares 的答案是正确的。这是获取现有范围的范围参数的相反方式:

    范围左上角单元格的地址为:rng.Resize(1, 1).Address,行号和列号分别为rng.Rowrng.Column

    范围右下角单元格的地址为:rng.Item(rng.Count).Address,同样行号和列号为rng.Item(rng.Count).Rowrng.Item(rng.Count).Column

    【讨论】:

      【解决方案3】:

      感谢您的建议。经过几天的休息,我想出了一个新的想法并解决了。此代码可以帮助有需要的人。谢了!

      Sub RangeSelectionPrompt()
      
        Dim rng As Range
      
      
      
        On Error Resume Next
      
      
        Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
        
      If rng = "" Then Exit Sub
        
        
      InputBoxRes = rng.Address  ' example "$A$1:$KJ$55"
      
      
      
      LeftRange = Left(InputBoxRes, InStr(Replace(InputBoxRes, ":", "*"), "*") - 1)
      LeftReplace = Replace(LeftRange, "$", "#", 2)
      
      A_Parameter = Left(LeftReplace, InStr(Replace(LeftReplace, "#", "*"), "*") - 1)
      B_Parameter = Replace(LeftReplace, A_Parameter & "#", "")
      
      
          MsgBox A_Parameter 'A
          MsgBox B_Parameter '1
      
      
      RightRange = Replace(InputBoxRes, LeftRange & ":", "")
      LeftReplaceLeft = Replace(RightRange, "$", "#", 2)
      
      C_Parameter = Left(LeftReplaceLeft, InStr(Replace(LeftReplaceLeft, "#", "*"), "*") - 1)
      D_Parameter = Replace(LeftReplaceLeft, C_Parameter & "#", "")
      
      
          MsgBox C_Parameter 'KJ
          MsgBox D_Parameter '55
      
      
      
      End Sub
      

      【讨论】:

        【解决方案4】:

        您的方法更简单,结果是列号,而不是列字母。这两种方法都可以派上用场。谢谢。

          Sub RangeSelectionPrompt()
              
          Dim rng As Range
            
            
              Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
              
            
            MsgBox rng.Resize(1, 1).Address
            
                MsgBox rng.Column
                MsgBox rng.Row
            
            MsgBox rng.Item(rng.Count).Address
            
                MsgBox rng.Item(rng.Count).Column
                MsgBox rng.Item(rng.Count).Row
                
            End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-18
          • 2015-03-31
          相关资源
          最近更新 更多