2017-07-27 4 views
0

La plage nommée (ou la plage définie par l'utilisateur) comporte 6 colonnes, mais le nombre de lignes peut changer en fonction d'autres fonctions.Valeur de copie VBA de named_range dans TextBox

Essayez maintenant d'obtenir la valeur entière de cette plage, de toutes les 6 colonnes et de toutes les lignes dans un TextBox. Lignes délimitées par tabulation.

suivant renvoie de code objet erreur défini etc.

UserForm1.TextBox1.Value = Sheet1.Range("named_range").Value 

Toute aide très appréciée.

Edit:

FunThomas est juste, je won'e être en mesure d'obtenir la valeur de la plage sans le déclarer une ligne distincte. J'ai donc commencé avec le code ci-dessous qui fonctionne bien dans l'affichage de la plage dans un msgBox multiligne. Comment puis-je me débarrasser de l'InputBox supplémentaire, et afficher les résultats dans UserForm1.TextBox1 à la place de la msgBox qui a une fonctionnalité limitée.

Sub showOfferRange() 
Dim xRg As Range 
Dim xTxt As String 
Dim xCell As Range 
Dim xStr As String 
Dim xRow As Long 
Dim xCol As Long 
On Error Resume Next 
    xTxt = ThisWorkbook.Names("offers_running") 
Set xRg = Application.InputBox("Offer range:", "Display offers", xTxt, , , , , 8) 
'Set xRg = xTxt 
If xRg Is Nothing Then Exit Sub 
    On Error Resume Next 
For xRow = 1 To xRg.Rows.Count 
    For xCol = 1 To xRg.Columns.Count 
     xStr = xStr & xRg.Cells(xRow, xCol).Value & vbTab 
    Next 
    xStr = xStr & vbCrLf 
Next 
    MsgBox xStr 
End Sub 
+0

Voir [lien] (https://stackoverflow.com/documentation/excel-vba/1576/common-mistakes#t=201707270717591076459) – FunThomas

+0

Je ne sais pas comment le lien est lié à ma question. – joell

+0

Probablement vous voulez accéder à 'sheet1' d'un classeur, mais vous accédez à une variable appelée' sheet1'. Donc j'assume que vous avez besoin de quelque chose comme 'thisWorkbook.sheets (" sheet1 ")' ou 'activeWorkbook.sheets (" sheet1 ")', mais ceci n'est qu'une estimation. Le lien explique comment accéder au classeur et aux objets de la feuille de calcul. – FunThomas

Répondre

0

En gros, pour écrire le texte dans la zone de texte de la forme, ESt juste

UserForm1.TextBox1.text = UserForm1.TextBox1 
UserForm1.show 

Comme vous avez plusieurs lignes, ne pas oublier de mettre la MultiLine -Property de la zone de texte à true.

Un autre point: Vous devez changer les lignes où vous avez lu la plage. Le on error resume next est une déclaration très dangereuse car elle rattrape toutes les erreurs et vous pouvez vous retrouver complètement perdu pour trouver un bug. C'est seulement nécessaire pour attraper le cas que la boîte d'entrée ne retourne pas un Range (par exemple parce que l'annulation a été pressée). Donc, je vous suggère de modifier les steatements à

xTxt = ThisWorkbook.Names("offers_running") 
Set xRg = Nothing 
On Error Resume Next 
Set xRg = Application.InputBox("Offer range:", "Display offers", xTxt, , , , , 8) 
On Error Goto 0 
If xRg Is Nothing Then Exit Sub 
+0

Fonctionne très bien et merci pour la suggestion! Une dernière question comment puis-je me débarrasser de l'inputBox? Je ne veux pas cette étape supplémentaire. Lorsque j'utilise Set xRg = xTxt, j'obtiens une erreur de type incompatibilité. Probablement essayer de passer une chaîne comme une gamme. – joell