是否可以使用输入框从excel工作表中选择一行,然后从该行中选择特定的单元格值来填充VBA代码的其余部分?

是否可以使用输入框从excel工作表中选择一行,然后从该行中选择特定的单元格值来填充VBA代码的其余部分?,excel,vba,powerpoint,Excel,Vba,Powerpoint,我正在学习使用VBA从excel制作PPT。我已经编写了整个函数,但我想让用户更容易使用它。因此,我想看看是否可能,如果我创建一个输入框,用户在其中添加行号,然后选择该行中的特定单元格在PPT中添加值 例如,假设用户在输入框中输入“208”,单元格B208、I208、J208中的值用于如下所示的函数 ppSlide.Select Range("B208").Copy ppSlide.Shapes.Paste With pppres.Slides(1).Shapes(1)

我正在学习使用VBA从excel制作PPT。我已经编写了整个函数,但我想让用户更容易使用它。因此,我想看看是否可能,如果我创建一个输入框,用户在其中添加行号,然后选择该行中的特定单元格在PPT中添加值

例如,假设用户在输入框中输入“208”,单元格B208、I208、J208中的值用于如下所示的函数

 ppSlide.Select
    Range("B208").Copy
    ppSlide.Shapes.Paste
    With pppres.Slides(1).Shapes(1)
        .Top = 30
    End With

    ppSlide.Select
    Range("I208").Copy
    ppSlide.Shapes.Paste
    With pppres.Slides(1).Shapes(2)
        .Left = 140
        .Top = 73
    End With

    ppSlide.Select
    Range("J208").Copy
    ppSlide.Shapes.Paste
    With pppres.Slides(1).Shapes(3)
        .Left = 480
        .Top = 73
    End With

因此,用户只需将其添加到输入框中一次,就可以在15-16个不同点处更改值。而且不必弄乱代码。

我想这就是你的想法——或多或少。请看一看

Sub TestPPslide()

    Dim ppPres As Object                    ' which type of object?
    Dim ppSlide As Object                   ' which data type?
    Dim Inp As Variant
    Dim R As Long

    R = 2
    Do
        Inp = InputBox("Enter a valid row number.", "Slide selector", R)
        ' test if Inp is valid
        If IsNumeric(Inp) Then
            R = Int(Val(Inp))
            If R > 1 And R < 100 Then Exit Do
        Else
            If Len(Inp) = 0 Then Exit Sub       ' user presserd cancel
        End If
    Loop

    SetSlide R, ppSlide, ppPres.Slides(1)
End Sub

Private Function SetSlide(ByVal R As Long, _
                          ppSlide As Object, _
                          PresSlide As Object) As Boolean

    Dim Clm As Variant
    Dim Left As Variant, Top As Variant
    Dim C As Long

    Clm = Array("B", "I", "J")
    Left = Array(0, 140, 480)
    Top = Array(30, 73, 73)

    For C = 0 To UBound(Clm)
        Cells(R, Clm(C)).Copy
        ppSlide.Shapes.Paste
        With PresSlide.Shapes(C + 1)
            .Left = Left(C)
            .Top = Top(C)
        End With
    Next C
End Function
子TestPPslide()
Dim ppPres作为对象“哪种类型的对象?”?
Dim ppSlide作为对象“哪种数据类型?”?
作为变体的Dim-Inp
变暗,变长
R=2
做
Inp=InputBox(“输入有效的行号。”,“幻灯片选择器”,R)
'测试Inp是否有效
如果是数字(Inp),则
R=Int(Val(Inp))
如果R>1且R<100,则退出Do
其他的
如果Len(Inp)=0,则退出Sub'用户按取消
如果结束
环
固定滑块R、ppSlide、ppPres.滑块(1)
端接头
专用函数SetSlide(ByVal R,长度为_
ppSlide作为对象_
按lide作为对象)作为布尔值
Dim Clm作为变体
变光左侧为变型,顶部为变型
尺寸C与长度相同
Clm=数组(“B”、“I”、“J”)
左=阵列(0、140、480)
顶部=阵列(30,73,73)
对于C=0至UBound(Clm)
细胞(R,Clm(C))。复制
ppSlide.Shapes.Paste
带冲压形状(C+1)
.左=左(C)
.Top=Top(C)
以
下一个C
端函数
我不知道您的对象是什么,它们是来自Excel还是来自PP。因此,我可能无法正确处理这些对象。或者,您自己的代码在这方面可能存在一些不一致之处。将我的代码作为如何设置它的指南

  • 创建带有子过程和函数的
    Main
    。不要只是把一个想法一个接一个地串联成一个过程
  • Main
    必须包含任务的输入。然后,它必须将作业交给下一个程序,在这种情况下,下一个程序将子
    SetSlide
    修改后的两个对象反馈给下一个子例程,以便主
    或下一个子例程进一步注意
  • 避免
    选择
    激活
    。您可以访问每个对象的每个部分,而无需执行此类操作

  • 是的,这是可能的。你试过了吗?现在我只能选择一个特定的单元格,不知道如何从输入框中的一个值中选择多个单元格。你可以将
    文本框
    值指定给一个变量,然后为列和变量定义每个范围,例如,
    Dim inputrownNumber只要长
    然后
    inputrownNumber=TextBox1.Text
    然后
    范围(“B”和inputrownNumber)
    。我需要知道更多信息,例如工作表上的文本框或用户表单,用户是否会单击按钮使其工作等,以便能够提供合适的答案。。