ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何解决Inputbox不能跨工作簿选择的问题?

如何解决Inputbox不能跨工作簿选择的问题?

作者:绿色风 分类: 时间:2022-08-17 浏览:92
楼主
amulee
Q:如何解决Inputbox不能跨工作簿选择的问题?
A:如本例,其原始代码功能为选择一个区域,转置链接至当前区域。代码如下:
  1. Sub Test()
  2.     Dim Rng1 As Range
  3.     Dim Rng2 As Range
  4.     Dim RowN&, ColN&, i&, j&
  5.     On Error Resume Next
  6.     '选择源数据
  7.     Set Rng1 = Application.InputBox("请选择源数据区域", Type:=8)
  8.     If Err.Number <> 0 Then
  9.         MsgBox "操作取消"
  10.         Exit Sub
  11.     End If
  12.     If Rng1.Areas.Count > 1 Then
  13.         MsgBox "选择多个区域无效"
  14.         Exit Sub
  15.     End If
  16.     Err.Clear
  17.     '新区域
  18.     RowN = Rng1.Rows.Count
  19.     ColN = Rng1.Columns.Count
  20.     Set Rng2 = Selection(1).Resize(ColN, RowN)
  21.     For i = 1 To RowN
  22.         For j = 1 To ColN
  23.             Rng2(j, i).Formula = "=" & Rng1(i, j).Address(0, 0, xlA1, True)
  24.         Next j
  25.     Next i
  26. End Sub
该代码利用Application.Inputbox来选择区域,但是该方法不能够跨工作簿选择。同样,若采用RefEdit控件也存在不能跨工作簿选择的问题。

可以使用窗体+文本框解决该问题。添加一个窗体,写入以下代码:
  1. Private Slc As Range
  2. Private WithEvents App As Excel.Application

  3. Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  4.     Me.TextBox1 = Selection.Address(0, 0, xlA1, True)
  5. End Sub
  6. Private Sub CommandButton1_Click()
  7.     On Error GoTo Err_H
  8.     Dim Rng1 As Range
  9.     Dim Rng2 As Range
  10.     '返回设置的区域
  11.     Set Rng1 = Range(TextBox1.Text)
  12.     If Rng1.Areas.Count > 1 Then
  13.         MsgBox "选择多个区域无效"
  14.         Exit Sub
  15.     End If
  16.     '新区域
  17.     Set Rng2 = Slc
  18.     RowN = Rng1.Rows.Count
  19.     ColN = Rng1.Columns.Count
  20.     Set Rng2 = Slc(1).Resize(ColN, RowN)
  21.     For i = 1 To Rng1.Columns.Count
  22.         For j = 1 To ColN
  23.             Rng2(j, i).Formula = "=" & Rng1(i, j).Address(0, 0, xlA1, True)
  24.         Next j
  25.     Next i
  26.     Unload Me
  27.     Exit Sub
  28. Err_H:
  29.     MsgBox "发生错误!请重新选择"
  30. End Sub

  31. Private Sub CommandButton2_Click()
  32.     MsgBox "操作已取消"
  33.     Unload Me
  34. End Sub
  35. Private Sub UserForm_Initialize()
  36.     '记录当前选择的区域
  37.     Set Slc = Application.Selection
  38.     Set App = ThisWorkbook.Application
  39.     Me.TextBox1.Locked = True
  40. End Sub

  41. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  42.     '回到之前选择的区域
  43.     Slc.Parent.Parent.Activate
  44.     Slc.Parent.Activate
  45.     Slc.Select
  46.     Set App = Nothing
  47. End Sub
在模块中写入以下代码来调用该窗体:
  1. Sub getNewSelect()
  2.     UserForm1.Show 0
  3. End Sub
参考附件:
解决Inputbox跨工作簿.rar
2楼
水星钓鱼
学习下

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap