How get some parts of a main text (EXCEL VBA) - vba

I have a text that is segregated with "/" and I need to get some parts of it.
Operator is my variable that gets the main text from the system.
The text is segregated with "/", so for example I need to get the text between the 2nd and 3rd "/".
Ex1: Main text: 40 XY3131Z/9'6"/ABC/OWN/STL/VENT/8741
column1:ABC
Ex2: Main text: 40 AB/9'6"/ABC/OWN/STL/VENT/8741
column1:ABC
Note: The main text is variable, so I cannot use only = Left or Right
It need to be with VBA

Please, use the next function:
Function getText(strTxt As String) As String
getText = Split(strTxt, "/")(2)
End Function
It can be tested in the next way:
Sub testGetText()
Dim x As String
x = "40 XY3131Z/9'6""/ABC/OWN/STL/VENT/8741" 'the double double quote is to be able to write it in VBA. If the string is in a cell, it may look as you show it...
MsgBox getText(x)
End Sub
Or as UDF (user defined function) from a cell:
=getText(A1)
Of course, in A1 should be the text where to extract the string you need...

Related

How to search only the first line of a multiline textbox in VB.NET

Is there any way to search only the first line of a Multiline Textbox without knowing exactly at what position the text is you're looking for?
If I knew the position of the text I was looking for I could do something like:
Dim myNotes As String = "The book has a lot of text"
Dim myText As String = "text"
If Not myNotes.Substring(0,4) = myText Then
' Do Something
End If
Or if I wanted to search the entire textbox I could do something like:
Dim myNotes As String = "The book has a lot of text"
Dim myText As String = "text"
If Not myNotes.Contains(myText) Then
' Do Something
End If
But I want to search only the first line of the textbox and I'm not sure at what position the text may be. Is there anyway to do a search like that?
This is another example of why you should ALWAYS read the relevant documentation. If you had read the documentation for the TextBox class then you'd know that it has a Lines property. To get the first line of text, you simply get the first element of that array:
Dim firstLine = myTextBox.Lines(0)
If Not filrstLine.Contains(myText) Then
'Do something
End If
Note that this only applies where the user has explicitly added a line break to the text. I assume that that is what you want, given that you have accepted another answer that does the same thing. If you mean the first line based on automatic word-wrap then that requires a bit more effort.
You could take the text and extract the first line.
int pos = text.IndexOfAny('\r', '\n');
if (pos >= 0)
text = text.SubString(0, pos);
// text now contains only the first line
Then you can search the resulting string.

Append Strings and values together to target a form control in VBA

I'm so close to getting this code working, I just need a little push please. I would like to
take the name of a combo box and then add a string to the end, But then get the value of a textbox with that string. This is to create a dynamic function instead of pasting the same code over and over.
Here's what I have so far, after you select something in the dropdown, the data is then pulled to populate the boxes next to it. I have about 8 drop downs so far so that's why I need this to work.
'Combobox after update
Call GrabData(Me, Me.ActiveControl)
Then
Private Sub GrabData(ctl As Control)
'name of ctl/combobox is "Kitchen"
data1 = (ctl.Name & "Size") '"KitchenSize"
'Here is where it all goes wrong
data1.Value = size.value
'size.value is just a textbox for example
End Sub
I can debug this with:
msgbox(data1)
'outputs "KitchenSize"
But I cannot get the value of kitchensize's textbox with data1.value
Error:
Object Required
I have also added Dim As String / Dim As Control.
I will be assigning the variable to some other stuff in this 50 line code I wrote so please don't take the above example as exactly what I intend to do, I just need help appending the ctl.name to a string, then use that to reference another control and so on.
EDIT
For anyone who wants to know, I figured it out.
Dim Ctrl As Control
Dim CtrlName As String
CtrlName = ctl.Name & "Size"
Set Ctrl = Me.Controls(CtrlName)
Ctrl.Value = 'Wherever you want to send the values to
See the edit.
You need to dim it as a string, then use Set Ctrl

Is there an easy VBA code using Split() Function to get a list of values for a combo box that was originally from a text box as a string?

On my access form, I have a text box that will be a string of characters with multiple "/"s throughout the string. I want to use the split function to separate this string into a list of values to use for my combo box on a subform.
I know it's somewhere along the lines of:
Public Function MakeList()
Dim MyList as String
Dim txt as String
txt = [myTextBoxField].Value
MyList = Split(txt,"/")
Either:
[myComboBox].Value = MyList
Or:
[myTextBoxField].Value = MyList
End Sub
I am not sure if this is supposed to be on "Form Load" or in a module for the Public Function.
All other code shows a For Loop or Debug.Print. I am looking to store this list as a field in my table and then use that field for my Row Source in my combo box.
First, combobox RowSourceType property must be set to ValueList. Next, VBA sets RowSource property, not Value. List is not a property of combobox in Access. Simply:
Me.myComboBox.RowSource = Replace(Me.myTextBoxField, "/", ";")
Form Load event should be appropriate.

RunCode does not Run a Public Function in MS Access

I am new to MS Access and I am trying to create a simple Macro with a call to VBA code.
the VBA code here is a sample (which also doesn't run)
Public Function RunImport()
Dim N As Integer
Dim Message1, Message2, Title, Default1, Default2, JulianSD, JulianED
Message1 = "Enter Julian Start Date"
Message2 = "Enter Julian End Date"
Title = "User Input Section"
Default1 = "17365"
Default2 = "17000"
JulianSD = InputBox(Message1, Title, Default1)
JulianED = InputBox(Message2, Title, Default2)
End Function
do you think you might be able to locate an issue here?
Thanks!
PS. I am using Version 14.0.7177.500 (32-bit). it wasn't my choice.. (if it were, I wouldn't be using access.. :p)
The most common use of a function is to return a value or values. Your function does not appear to be returning any value. At the end of a function you would normally have a line of code that says what value the function will return, for example....
RunImport = JulianSD - JulianED
End Function
A line like this would usually be inserted before the 'End Function' line. However if your intention is not to return a value, but instead you just want to run a vba macro, perhaps you need to change your function to a Sub routine...
Public Sub RunImport()
'code goes here
End Sub

Hiding/replacing code in VBA

I have a large chunk of code that manually defines each element of an array for me that is annoyingly long and positioned at the beginning of one of my functions. I would like to hide the code or set it somewhere else WITHOUT changing its current meaning in any way if possible. I would like to avoid making the array global. It's also not reasonable to pass the array from all the places that the function is called.
Is there some way to simply have the code sit somewhere else while VBA sees it as being a part of the function, i.e. as if I had all the elements defined at the beginning of the function? I imagine having some sort of "Sub" that's not actually a Sub (I might call it an "Excerpt") of code with the elements populated there with a single line in the function that calls the "Excerpt" by name.
You can return an array from a function so it could be in a module on its own;
public Function getArr() as string()
Dim arr(10) as string
...
arr(5) = "Cakey"
getArr = arr
End Function
Called with
Dim arry() as string: arry = getArr()
msgbox arry(5)