2013-08-13 2 views
0

Я использую код, который я получил из 101 готовых к использованию макросов Майкла Александра и Джона Уокенбаха.Как передать значение типа диапазона переменной типа String

В этом коде они задают значения диапазона в коде. Я хочу, чтобы пользователи могли выбирать значения. Я получаю ошибки после того, как я появился, чтобы успешно ввести пользователя в значение диапазона. Чтобы помочь мне отладить проблему, я только что написал короткий макрос, чтобы проверить, что я пытаюсь сделать. Но я не могу передать информацию в окно сообщения, чтобы я мог видеть, что он работает (хотя, похоже, потому, что, когда пользователь выбирает диапазон, указанный в поле ввода, я не могу понять) как взять предоставленный пользователем тип RANGE и превратить его в значение STRING, которое будет показано в моем сообщении, или использовать его в качестве диапазона. Теперь, будучи новичком, я сейчас думаю, что этот небольшой тест более важен, чем исходная проблема, чтобы помочь научиться отладке.

(я попробовал несколько различных вариантов, включая делают диапазон измерения, как AS Variant и пытаемся сделать StringVariable присваивается значение диапазона (например, UserRange = Rng1 Где UserRange является строковым типом и Rng1 имеет типа Range):

Вот мой код

Sub SelectRange() 
    Dim Rng1 As Range 
Set Rng1 = Application.InputBox("select cell", Type:=8) 
MsgBox ("You selected " & Rng1 & "as the range") 
End Sub 

Здесь был оригинальный код:

Sub Macro101() 

' I've already changed Step#4 to read the worksheet name instead of C20 
' I'm now trying to change Step#3 to let the user select the range but 
' I'm having problems using the input from the user becuase I've made that 
' Variable as Range (Not shown here). 


'Step 1: Declare your variables 
    Dim pp As PowerPoint.Application 
    Dim PPPres As PowerPoint.Presentation 
    Dim PPSlide As PowerPoint.Slide 
    Dim xlwksht As Excel.Worksheet 
    Dim MyRange As String 
    Dim MyTitle As String 
    Dim Slidecount As Long 


'Step 2: Open PowerPoint, add a new presentation and make visible 
    Set pp = New PowerPoint.Application 
    Set PPPres = pp.Presentations.Add 
    pp.Visible = True 


'Step 3: Set the ranges for your data and title 
    MyRange = "A1:J29" 


'Step 4: Start the loop through each worksheet 
    For Each xlwksht In ActiveWorkbook.Worksheets 
    xlwksht.Select 
    Application.Wait (Now + TimeValue("0:00:1")) 
    MyTitle = xlwksht.Range("C20").Value 


'Step 5: Copy the range as picture 
    xlwksht.Range(MyRange).CopyPicture _ 
    Appearance:=xlScreen, Format:=xlPicture 


'Step 6: Count slides and add new slide as next available slide number 
    Slidecount = PPPres.Slides.Count 
    Set PPSlide = PPPres.Slides.Add(Slidecount + 1, ppLayoutTitleOnly) 
    PPSlide.Select 


'Step 7: Paste the picture and adjust its position 
    PPSlide.Shapes.Paste.Select 
    pp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True 
    pp.ActiveWindow.Selection.ShapeRange.Top = 100 


'Step 8: Add the title to the slide then move to next worksheet 
    PPSlide.Shapes.Title.TextFrame.TextRange.Text = MyTitle 
    Next xlwksht 


'Step 9: Memory Cleanup 
    pp.Activate 
    Set PPSlide = Nothing 
    Set PPPres = Nothing 
    Set pp = Nothing 

End Sub 

ответ

0

Вы должны использовать свойство Range.Address, как так :

Sub SelectRange() 

    Dim Rng1 As Range 

    On Error Resume Next 'If the user presses cancel, it would cause an error 
    Set Rng1 = Application.InputBox("Select Cell", "Range Selection", Selection.Address, Type:=8) 
    On Error GoTo 0   'Remove the On Error Resume Next condition 
    If Rng1 Is Nothing Then Exit Sub 'Pressed cancel 

    MsgBox ("You selected " & Rng1.Address & " as the range") 

End Sub 

Я также хотел, чтобы убедиться, что не будет ошибкой, если пользователь нажимает отменить, и я хотел бы использовать текущий выбор по умолчанию.

+0

Спасибо Тиграватар. Вы абсолютно правы в необходимости проверки ошибок. Я ударил отменить несколько раз сам, просто тестируя. Я включу это в основной модуль, который я пытаюсь изменить. – user2498217

0

Вам не нужно CONVER в Range в строку, вы должны использовать свой адрес свойство, которое является строкой

Sub SelectRange() 
    Dim Rng1 As Range 
Set Rng1 = Application.InputBox("select cell", Type:=8) 
MsgBox ("You selected " & Rng1.Address & "as the range") 
End Sub 
+0

Отлично! Это решило эту проблему. Это всегда удивительно, как трудно, когда вы не знаете, как и как легко решение с кем-то, кто знает, что они делают. Большое спасибо. Теперь я могу продолжить учебу. – user2498217

Смежные вопросы